/********************************************************************************
 * @file    app_provisioning.c
 * @brief   配网应用逻辑处理
 * 
 * @author  nzttj
 * @date    2025-02-17
 * @version 1.0
 * 
 * Copyright (C) 2025 nzttj
 * 
 * 本软件使用 GNU 通用公共许可证 (GPL) 第 3 版授权。
 * 
 * 您可以自由使用、修改、分发本软件，但必须遵守以下条件：
 * 1. 源代码必须开放，且您修改后的代码也必须以 GPL 许可证发布。
 * 2. 发布或分发本软件时，必须附带本许可证，并提供源代码或获取源代码的方式。
 * 
 * 本软件按“原样”提供，不附带任何担保，使用风险由用户自行承担。
 * 
 ********************************************************************************/

#include "app_provisioning.h"
#include "provisioning.h"
#include "app_wifi.h"
#include "app_nvs.h"
#include "app_mqtt.h"
#include "app_ota.h"

#include <string.h>

#include "cJSON.h"
#include "esp_log.h"
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/timers.h"

static const char html[10902] = {
	0x3C, 0x21, 0x44, 0x4F, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6D, 0x6C, 0x3E, 0x0D, 
	0x0A, 0x3C, 0x68, 0x74, 0x6D, 0x6C, 0x20, 0x6C, 0x61, 0x6E, 0x67, 0x3D, 0x22, 0x7A, 0x68, 0x22, 
	0x3E, 0x0D, 0x0A, 0x3C, 0x68, 0x65, 0x61, 0x64, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x3C, 
	0x6D, 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3D, 0x22, 0x55, 0x54, 
	0x46, 0x2D, 0x38, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x6D, 0x65, 0x74, 0x61, 
	0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x76, 0x69, 0x65, 0x77, 0x70, 0x6F, 0x72, 0x74, 0x22, 
	0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x3D, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3D, 
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2D, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x20, 0x69, 0x6E, 
	0x69, 0x74, 0x69, 0x61, 0x6C, 0x2D, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x3D, 0x31, 0x2E, 0x30, 0x22, 
	0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x3E, 0xE7, 0x89, 
	0xA9, 0xE8, 0x81, 0x94, 0xE7, 0xBD, 0x91, 0xE8, 0xAE, 0xBE, 0xE5, 0xA4, 0x87, 0xE9, 0x85, 0x8D, 
	0xE7, 0xBD, 0x91, 0x3C, 0x2F, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x3C, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x62, 0x6F, 0x64, 0x79, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x66, 0x61, 0x6D, 0x69, 0x6C, 
	0x79, 0x3A, 0x20, 0x41, 0x72, 0x69, 0x61, 0x6C, 0x2C, 0x20, 0x73, 0x61, 0x6E, 0x73, 0x2D, 0x73, 
	0x65, 0x72, 0x69, 0x66, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x30, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 
	0x6E, 0x67, 0x3A, 0x20, 0x30, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 
	0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x66, 0x39, 0x66, 0x39, 0x66, 0x39, 0x3B, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x63, 0x6F, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x65, 0x72, 0x20, 
	0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 
	0x61, 0x78, 0x2D, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x35, 0x30, 0x30, 0x70, 0x78, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x61, 
	0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x32, 0x30, 0x70, 0x78, 0x20, 0x61, 0x75, 0x74, 0x6F, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 
	0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x31, 0x35, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 
	0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x66, 0x66, 0x66, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 
	0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x3A, 0x20, 0x31, 0x30, 
	0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x62, 0x6F, 0x78, 0x2D, 0x73, 0x68, 0x61, 0x64, 0x6F, 0x77, 0x3A, 0x20, 0x30, 0x20, 0x34, 
	0x70, 0x78, 0x20, 0x36, 0x70, 0x78, 0x20, 0x72, 0x67, 0x62, 0x61, 0x28, 0x30, 0x2C, 0x20, 0x30, 
	0x2C, 0x20, 0x30, 0x2C, 0x20, 0x30, 0x2E, 0x31, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x68, 0x31, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x63, 
	0x65, 0x6E, 0x74, 0x65, 0x72, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x33, 0x33, 0x33, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x61, 
	0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x32, 0x30, 0x70, 
	0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x67, 
	0x72, 0x6F, 0x75, 0x70, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 
	0x6D, 0x3A, 0x20, 0x31, 0x35, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6C, 
	0x61, 0x62, 0x65, 0x6C, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x20, 0x62, 0x6C, 0x6F, 
	0x63, 0x6B, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 
	0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x35, 0x70, 
	0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x35, 0x35, 0x35, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 
	0x65, 0x78, 0x74, 0x22, 0x5D, 0x2C, 0x20, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 
	0x65, 0x3D, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 0x22, 0x5D, 0x20, 0x7B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 
	0x74, 0x68, 0x3A, 0x20, 0x31, 0x30, 0x30, 0x25, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 
	0x31, 0x32, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x36, 
	0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 
	0x69, 0x64, 0x20, 0x23, 0x64, 0x64, 0x64, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 
	0x69, 0x75, 0x73, 0x3A, 0x20, 0x38, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6F, 0x78, 0x2D, 0x73, 0x69, 0x7A, 0x69, 0x6E, 
	0x67, 0x3A, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, 0x78, 0x3B, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x61, 0x72, 0x67, 
	0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x38, 0x70, 0x78, 0x3B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, 
	0x3D, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x5D, 0x3A, 0x66, 0x6F, 0x63, 0x75, 0x73, 0x2C, 0x20, 
	0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x70, 0x61, 0x73, 0x73, 
	0x77, 0x6F, 0x72, 0x64, 0x22, 0x5D, 0x3A, 0x66, 0x6F, 0x63, 0x75, 0x73, 0x20, 0x7B, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6F, 0x72, 0x64, 
	0x65, 0x72, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x30, 0x30, 0x37, 0x62, 0x66, 
	0x66, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x6F, 0x75, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2D, 0x74, 0x69, 
	0x74, 0x6C, 0x65, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 
	0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x66, 0x31, 0x66, 0x31, 0x66, 0x31, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 
	0x6E, 0x67, 0x3A, 0x20, 0x38, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 
	0x20, 0x31, 0x36, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 
	0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, 0x75, 
	0x73, 0x3A, 0x20, 0x36, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 
	0x6F, 0x6D, 0x3A, 0x20, 0x31, 0x32, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6F, 0x72, 0x3A, 0x20, 0x70, 
	0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x6F, 
	0x70, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 
	0x3A, 0x20, 0x31, 0x32, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x37, 0x37, 0x37, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x63, 0x6F, 0x6C, 0x6C, 0x61, 0x70, 0x73, 
	0x65, 0x64, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x20, 0x7B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x64, 
	0x74, 0x68, 0x3A, 0x20, 0x31, 0x30, 0x30, 0x25, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 
	0x31, 0x34, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 
	0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x30, 0x30, 0x37, 0x62, 0x66, 0x66, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 
	0x3A, 0x20, 0x23, 0x66, 0x66, 0x66, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, 
	0x65, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x3A, 0x20, 0x38, 
	0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x38, 0x70, 0x78, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 
	0x75, 0x72, 0x73, 0x6F, 0x72, 0x3A, 0x20, 0x70, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x3B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 
	0x6E, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 
	0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x30, 0x2E, 0x33, 0x73, 0x3B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x3A, 0x64, 0x69, 0x73, 
	0x61, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 
	0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x75, 0x72, 
	0x73, 0x6F, 0x72, 0x3A, 0x20, 0x6E, 0x6F, 0x74, 0x2D, 0x61, 0x6C, 0x6C, 0x6F, 0x77, 0x65, 0x64, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x3A, 0x68, 
	0x6F, 0x76, 0x65, 0x72, 0x3A, 0x6E, 0x6F, 0x74, 0x28, 0x3A, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6C, 
	0x65, 0x64, 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 
	0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x30, 0x30, 0x35, 0x36, 0x62, 0x33, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x40, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x20, 0x28, 0x6D, 0x61, 0x78, 0x2D, 
	0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x34, 0x38, 0x30, 0x70, 0x78, 0x29, 0x20, 0x7B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x63, 0x6F, 
	0x6E, 0x74, 0x61, 0x69, 0x6E, 0x65, 0x72, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 
	0x6E, 0x67, 0x3A, 0x20, 0x31, 0x30, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x31, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6F, 
	0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x32, 0x30, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x31, 
	0x35, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6F, 0x6E, 
	0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x36, 0x70, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x2E, 0x65, 0x78, 0x70, 0x61, 0x6E, 0x64, 0x65, 0x64, 0x3A, 0x3A, 0x61, 0x66, 
	0x74, 0x65, 0x72, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x3A, 0x20, 0x22, 0xE2, 0x96, 0xBC, 
	0x22, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x66, 0x6C, 0x6F, 0x61, 0x74, 0x3A, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 
	0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 
	0x20, 0x30, 0x2E, 0x33, 0x73, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x63, 0x6F, 
	0x6C, 0x6C, 0x61, 0x70, 0x73, 0x65, 0x64, 0x2E, 0x65, 0x78, 0x70, 0x61, 0x6E, 0x64, 0x65, 0x64, 
	0x3A, 0x3A, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 
	0x3A, 0x20, 0x72, 0x6F, 0x74, 0x61, 0x74, 0x65, 0x28, 0x31, 0x38, 0x30, 0x64, 0x65, 0x67, 0x29, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x3C, 0x2F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x3C, 0x2F, 0x68, 0x65, 
	0x61, 0x64, 0x3E, 0x0D, 0x0A, 0x3C, 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0D, 0x0A, 0x0D, 0x0A, 0x3C, 
	0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x63, 0x6F, 0x6E, 0x74, 0x61, 
	0x69, 0x6E, 0x65, 0x72, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x68, 0x31, 0x3E, 
	0xE8, 0xAE, 0xBE, 0xE5, 0xA4, 0x87, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0x91, 0x3C, 0x2F, 0x68, 0x31, 
	0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x69, 0x64, 0x3D, 
	0x22, 0x77, 0x69, 0x66, 0x69, 0x46, 0x6F, 0x72, 0x6D, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 
	0x22, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2D, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x22, 0x3E, 
	0x57, 0x69, 0x2D, 0x46, 0x69, 0x20, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0x20, 0x3C, 0x73, 0x70, 
	0x61, 0x6E, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 
	0x61, 0x6C, 0x22, 0x3E, 0x28, 0xE5, 0x8F, 0xAF, 0xE9, 0x80, 0x89, 0x29, 0x3C, 0x2F, 0x73, 0x70, 
	0x61, 0x6E, 0x3E, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x66, 
	0x6F, 0x72, 0x6D, 0x2D, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x77, 
	0x69, 0x66, 0x69, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 
	0x20, 0x66, 0x6F, 0x72, 0x3D, 0x22, 0x73, 0x73, 0x69, 0x64, 0x22, 0x3E, 0x57, 0x69, 0x2D, 0x46, 
	0x69, 0x20, 0x53, 0x53, 0x49, 0x44, 0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x69, 0x6E, 0x70, 
	0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x69, 
	0x64, 0x3D, 0x22, 0x73, 0x73, 0x69, 0x64, 0x22, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x73, 
	0x73, 0x69, 0x64, 0x22, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x68, 0x6F, 0x6C, 0x64, 0x65, 0x72, 
	0x3D, 0x22, 0xE8, 0xAF, 0xB7, 0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0x57, 0x69, 0x2D, 0x46, 0x69, 
	0xE5, 0x90, 0x8D, 0xE7, 0xA7, 0xB0, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x66, 0x6F, 
	0x72, 0x6D, 0x2D, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x77, 0x69, 
	0x66, 0x69, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 
	0x6E, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x66, 0x6F, 0x72, 0x3D, 0x22, 0x70, 0x77, 0x64, 
	0x22, 0x3E, 0x57, 0x69, 0x2D, 0x46, 0x69, 0x20, 0xE5, 0xAF, 0x86, 0xE7, 0xA0, 0x81, 0x20, 0x3C, 
	0x73, 0x70, 0x61, 0x6E, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x70, 0x74, 0x69, 
	0x6F, 0x6E, 0x61, 0x6C, 0x22, 0x3E, 0x28, 0xE5, 0x8F, 0xAF, 0xE9, 0x80, 0x89, 0x29, 0x3C, 0x2F, 
	0x73, 0x70, 0x61, 0x6E, 0x3E, 0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x69, 0x6E, 0x70, 0x75, 
	0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 
	0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x70, 0x77, 0x64, 0x22, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 
	0x22, 0x70, 0x77, 0x64, 0x22, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x68, 0x6F, 0x6C, 0x64, 0x65, 
	0x72, 0x3D, 0x22, 0xE8, 0xAF, 0xB7, 0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0x57, 0x69, 0x2D, 0x46, 
	0x69, 0xE5, 0xAF, 0x86, 0xE7, 0xA0, 0x81, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 
	0x22, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2D, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x22, 0x20, 
	0x6F, 0x6E, 0x63, 0x6C, 0x69, 0x63, 0x6B, 0x3D, 0x22, 0x74, 0x6F, 0x67, 0x67, 0x6C, 0x65, 0x53, 
	0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x53, 0x65, 0x63, 0x74, 
	0x69, 0x6F, 0x6E, 0x27, 0x29, 0x22, 0x3E, 0x4D, 0x51, 0x54, 0x54, 0x20, 0xE9, 0x85, 0x8D, 0xE7, 
	0xBD, 0xAE, 0x20, 0x3C, 0x73, 0x70, 0x61, 0x6E, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 
	0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x22, 0x3E, 0x28, 0xE5, 0x8F, 0xAF, 0xE9, 0x80, 
	0x89, 0x29, 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 
	0x61, 0x73, 0x73, 0x3D, 0x22, 0x63, 0x6F, 0x6C, 0x6C, 0x61, 0x70, 0x73, 0x65, 0x64, 0x22, 0x20, 
	0x69, 0x64, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x22, 
	0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 
	0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 
	0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 
	0x66, 0x6F, 0x72, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x72, 0x6C, 0x22, 0x3E, 0x4D, 
	0x51, 0x54, 0x54, 0x20, 0xE6, 0x9C, 0x8D, 0xE5, 0x8A, 0xA1, 0xE5, 0x99, 0xA8, 0x20, 0x55, 0x52, 
	0x4C, 0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x69, 0x6E, 0x70, 0x75, 
	0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x69, 0x64, 
	0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x72, 0x6C, 0x22, 0x20, 0x6E, 0x61, 0x6D, 0x65, 
	0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x72, 0x6C, 0x22, 0x20, 0x70, 0x6C, 0x61, 0x63, 
	0x65, 0x68, 0x6F, 0x6C, 0x64, 0x65, 0x72, 0x3D, 0x22, 0xE8, 0xAF, 0xB7, 0xE8, 0xBE, 0x93, 0xE5, 
	0x85, 0xA5, 0x4D, 0x51, 0x54, 0x54, 0xE6, 0x9C, 0x8D, 0xE5, 0x8A, 0xA1, 0xE5, 0x99, 0xA8, 0x55, 
	0x52, 0x4C, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 
	0x3D, 0x22, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x3E, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x66, 0x6F, 0x72, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 
	0x5F, 0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3E, 0x4D, 0x51, 0x54, 0x54, 0x20, 
	0xE7, 0x94, 0xA8, 0xE6, 0x88, 0xB7, 0xE5, 0x90, 0x8D, 0x20, 0x3C, 0x73, 0x70, 0x61, 0x6E, 0x20, 
	0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x22, 
	0x3E, 0x28, 0xE5, 0x8F, 0xAF, 0xE9, 0x80, 0x89, 0x29, 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 
	0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x69, 0x6E, 0x70, 0x75, 0x74, 
	0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x69, 0x64, 0x3D, 
	0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x20, 
	0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x73, 0x65, 0x72, 0x6E, 
	0x61, 0x6D, 0x65, 0x22, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x68, 0x6F, 0x6C, 0x64, 0x65, 0x72, 
	0x3D, 0x22, 0xE8, 0xAF, 0xB7, 0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0x4D, 0x51, 0x54, 0x54, 0xE7, 
	0x94, 0xA8, 0xE6, 0x88, 0xB7, 0xE5, 0x90, 0x8D, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 
	0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x67, 0x72, 0x6F, 
	0x75, 0x70, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x66, 0x6F, 0x72, 
	0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x70, 0x77, 0x64, 0x22, 0x3E, 0x4D, 0x51, 0x54, 0x54, 
	0x20, 0xE5, 0xAF, 0x86, 0xE7, 0xA0, 0x81, 0x20, 0x3C, 0x73, 0x70, 0x61, 0x6E, 0x20, 0x63, 0x6C, 
	0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x22, 0x3E, 0x28, 
	0xE5, 0x8F, 0xAF, 0xE9, 0x80, 0x89, 0x29, 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 0x3C, 0x2F, 
	0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20, 0x74, 
	0x79, 0x70, 0x65, 0x3D, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 0x22, 0x20, 0x69, 
	0x64, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x70, 0x77, 0x64, 0x22, 0x20, 0x6E, 0x61, 0x6D, 
	0x65, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x70, 0x77, 0x64, 0x22, 0x20, 0x70, 0x6C, 0x61, 
	0x63, 0x65, 0x68, 0x6F, 0x6C, 0x64, 0x65, 0x72, 0x3D, 0x22, 0xE8, 0xAF, 0xB7, 0xE8, 0xBE, 0x93, 
	0xE5, 0x85, 0xA5, 0x4D, 0x51, 0x54, 0x54, 0xE5, 0xAF, 0x86, 0xE7, 0xA0, 0x81, 0x22, 0x3E, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x64, 
	0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x66, 0x6F, 0x72, 
	0x6D, 0x2D, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x6C, 0x61, 0x62, 0x65, 
	0x6C, 0x20, 0x66, 0x6F, 0x72, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x64, 0x6F, 0x77, 0x6E, 
	0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x22, 0x3E, 0x4D, 0x51, 0x54, 0x54, 0x20, 0xE4, 0xB8, 0x8B, 
	0xE5, 0x8F, 0x91, 0x20, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x20, 0x3C, 0x73, 0x70, 0x61, 0x6E, 0x20, 
	0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x22, 
	0x3E, 0x28, 0xE5, 0x8F, 0xAF, 0xE9, 0x80, 0x89, 0x29, 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 
	0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x69, 0x6E, 0x70, 0x75, 0x74, 
	0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x69, 0x64, 0x3D, 
	0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x64, 0x6F, 0x77, 0x6E, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 
	0x22, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x64, 0x6F, 0x77, 
	0x6E, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x22, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x68, 0x6F, 
	0x6C, 0x64, 0x65, 0x72, 0x3D, 0x22, 0xE8, 0xAF, 0xB7, 0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0xE4, 
	0xB8, 0x8B, 0xE5, 0x8F, 0x91, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 
	0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x67, 
	0x72, 0x6F, 0x75, 0x70, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x66, 
	0x6F, 0x72, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x70, 0x5F, 0x74, 0x6F, 0x70, 0x69, 
	0x63, 0x22, 0x3E, 0x4D, 0x51, 0x54, 0x54, 0x20, 0xE4, 0xB8, 0x8A, 0xE6, 0x8A, 0xA5, 0x20, 0x54, 
	0x6F, 0x70, 0x69, 0x63, 0x20, 0x3C, 0x73, 0x70, 0x61, 0x6E, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 
	0x3D, 0x22, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x22, 0x3E, 0x28, 0xE5, 0x8F, 0xAF, 
	0xE9, 0x80, 0x89, 0x29, 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 0x3C, 0x2F, 0x6C, 0x61, 0x62, 
	0x65, 0x6C, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 
	0x3D, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 
	0x5F, 0x75, 0x70, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x22, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 
	0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x70, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x22, 0x20, 
	0x70, 0x6C, 0x61, 0x63, 0x65, 0x68, 0x6F, 0x6C, 0x64, 0x65, 0x72, 0x3D, 0x22, 0xE8, 0xAF, 0xB7, 
	0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0xE4, 0xB8, 0x8A, 0xE6, 0x8A, 0xA5, 0x54, 0x6F, 0x70, 0x69, 
	0x63, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 
	0x22, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 
	0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x66, 0x6F, 0x72, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 
	0x6F, 0x74, 0x61, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x22, 0x3E, 0x4D, 0x51, 0x54, 0x54, 0x20, 
	0x4F, 0x54, 0x41, 0x20, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x20, 0x3C, 0x73, 0x70, 0x61, 0x6E, 0x20, 
	0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x22, 
	0x3E, 0x28, 0xE5, 0x8F, 0xAF, 0xE9, 0x80, 0x89, 0x29, 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 
	0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x69, 0x6E, 0x70, 0x75, 0x74, 
	0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x69, 0x64, 0x3D, 
	0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x6F, 0x74, 0x61, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x22, 
	0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x6F, 0x74, 0x61, 0x5F, 
	0x74, 0x6F, 0x70, 0x69, 0x63, 0x22, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x68, 0x6F, 0x6C, 0x64, 
	0x65, 0x72, 0x3D, 0x22, 0xE8, 0xAF, 0xB7, 0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0x4F, 0x54, 0x41, 
	0x20, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 
	0x73, 0x73, 0x3D, 0x22, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2D, 0x74, 0x69, 0x74, 0x6C, 
	0x65, 0x22, 0x20, 0x6F, 0x6E, 0x63, 0x6C, 0x69, 0x63, 0x6B, 0x3D, 0x22, 0x74, 0x6F, 0x67, 0x67, 
	0x6C, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x27, 0x6F, 0x74, 0x61, 0x53, 0x65, 
	0x63, 0x74, 0x69, 0x6F, 0x6E, 0x27, 0x29, 0x22, 0x3E, 0x4F, 0x54, 0x41, 0x20, 0xE9, 0x85, 0x8D, 
	0xE7, 0xBD, 0xAE, 0x20, 0x3C, 0x73, 0x70, 0x61, 0x6E, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 
	0x22, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x22, 0x3E, 0x28, 0xE5, 0x8F, 0xAF, 0xE9, 
	0x80, 0x89, 0x29, 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 
	0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x63, 0x6F, 0x6C, 0x6C, 0x61, 0x70, 0x73, 0x65, 0x64, 0x22, 
	0x20, 0x69, 0x64, 0x3D, 0x22, 0x6F, 0x74, 0x61, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x22, 
	0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 
	0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 
	0x67, 0x72, 0x6F, 0x75, 0x70, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 
	0x66, 0x6F, 0x72, 0x3D, 0x22, 0x6F, 0x74, 0x61, 0x5F, 0x75, 0x72, 0x6C, 0x22, 0x3E, 0x4F, 0x54, 
	0x41, 0x20, 0x55, 0x52, 0x4C, 0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 
	0x69, 0x6E, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, 0x74, 
	0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x6F, 0x74, 0x61, 0x5F, 0x75, 0x72, 0x6C, 0x22, 0x20, 0x6E, 
	0x61, 0x6D, 0x65, 0x3D, 0x22, 0x6F, 0x74, 0x61, 0x5F, 0x75, 0x72, 0x6C, 0x22, 0x20, 0x70, 0x6C, 
	0x61, 0x63, 0x65, 0x68, 0x6F, 0x6C, 0x64, 0x65, 0x72, 0x3D, 0x22, 0xE8, 0xAF, 0xB7, 0xE8, 0xBE, 
	0x93, 0xE5, 0x85, 0xA5, 0x4F, 0x54, 0x41, 0xE6, 0x9C, 0x8D, 0xE5, 0x8A, 0xA1, 0xE5, 0x99, 0xA8, 
	0x55, 0x52, 0x4C, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x20, 0x74, 0x79, 0x70, 
	0x65, 0x3D, 0x22, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x73, 
	0x75, 0x62, 0x6D, 0x69, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x22, 0x3E, 0xE9, 0x85, 0x8D, 
	0xE7, 0xBD, 0xAE, 0xE8, 0xAE, 0xBE, 0xE5, 0xA4, 0x87, 0x3C, 0x2F, 0x62, 0x75, 0x74, 0x74, 0x6F, 
	0x6E, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x2F, 0x66, 0x6F, 0x72, 0x6D, 0x3E, 0x0D, 
	0x0A, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0D, 0x0A, 0x0D, 0x0A, 0x3C, 0x73, 0x63, 0x72, 0x69, 
	0x70, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 0x20, 0xE5, 0x88, 0x87, 0xE6, 
	0x8D, 0xA2, 0xE6, 0x8A, 0x98, 0xE5, 0x8F, 0xA0, 0xE7, 0x8A, 0xB6, 0xE6, 0x80, 0x81, 0xE7, 0x9A, 
	0x84, 0xE5, 0x87, 0xBD, 0xE6, 0x95, 0xB0, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6E, 
	0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x74, 0x6F, 0x67, 0x67, 0x6C, 0x65, 0x53, 0x65, 0x63, 0x74, 
	0x69, 0x6F, 0x6E, 0x28, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x49, 0x64, 0x29, 0x20, 0x7B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 
	0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 
	0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 
	0x64, 0x28, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x49, 0x64, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x63, 
	0x6C, 0x61, 0x73, 0x73, 0x4C, 0x69, 0x73, 0x74, 0x2E, 0x74, 0x6F, 0x67, 0x67, 0x6C, 0x65, 0x28, 
	0x27, 0x63, 0x6F, 0x6C, 0x6C, 0x61, 0x70, 0x73, 0x65, 0x64, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x2F, 0x2F, 0x20, 0xE6, 0xB7, 0xBB, 0xE5, 0x8A, 0xA0, 0xE7, 0xAE, 0xAD, 0xE5, 0xA4, 0xB4, 
	0xE6, 0x8C, 0x87, 0xE7, 0xA4, 0xBA, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x20, 0x3D, 0x20, 0x64, 0x6F, 
	0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x6C, 0x65, 
	0x63, 0x74, 0x6F, 0x72, 0x28, 0x60, 0x5B, 0x6F, 0x6E, 0x63, 0x6C, 0x69, 0x63, 0x6B, 0x3D, 0x22, 
	0x74, 0x6F, 0x67, 0x67, 0x6C, 0x65, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x27, 0x24, 
	0x7B, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x49, 0x64, 0x7D, 0x27, 0x29, 0x22, 0x5D, 0x60, 
	0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x69, 0x74, 0x6C, 
	0x65, 0x2E, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x4C, 0x69, 0x73, 0x74, 0x2E, 0x74, 0x6F, 0x67, 0x67, 
	0x6C, 0x65, 0x28, 0x27, 0x65, 0x78, 0x70, 0x61, 0x6E, 0x64, 0x65, 0x64, 0x27, 0x29, 0x3B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 
	0x20, 0xE9, 0xA1, 0xB5, 0xE9, 0x9D, 0xA2, 0xE5, 0x8A, 0xA0, 0xE8, 0xBD, 0xBD, 0xE6, 0x97, 0xB6, 
	0xE8, 0x87, 0xAA, 0xE5, 0x8A, 0xA8, 0xE5, 0xA1, 0xAB, 0xE5, 0x85, 0x85, 0xE9, 0x85, 0x8D, 0xE7, 
	0xBD, 0xAE, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x2E, 0x61, 
	0x64, 0x64, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x4C, 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x28, 
	0x27, 0x44, 0x4F, 0x4D, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x4C, 0x6F, 0x61, 0x64, 0x65, 
	0x64, 0x27, 0x2C, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x29, 0x20, 0x7B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x28, 
	0x27, 0x2F, 0x67, 0x65, 0x74, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x27, 0x29, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x74, 0x68, 0x65, 0x6E, 
	0x28, 0x72, 0x65, 0x73, 0x70, 0x6F, 0x6E, 0x73, 0x65, 0x20, 0x3D, 0x3E, 0x20, 0x72, 0x65, 0x73, 
	0x70, 0x6F, 0x6E, 0x73, 0x65, 0x2E, 0x6A, 0x73, 0x6F, 0x6E, 0x28, 0x29, 0x29, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x74, 0x68, 0x65, 0x6E, 
	0x28, 0x63, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x20, 0x3D, 0x3E, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 
	0x20, 0xE5, 0xA1, 0xAB, 0xE5, 0x85, 0x85, 0x57, 0x69, 0x2D, 0x46, 0x69, 0xE9, 0x85, 0x8D, 0xE7, 
	0xBD, 0xAE, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 
	0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x73, 0x73, 0x69, 
	0x64, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x3D, 0x20, 0x63, 0x6F, 0x6E, 0x66, 
	0x69, 0x67, 0x2E, 0x73, 0x73, 0x69, 0x64, 0x20, 0x7C, 0x7C, 0x20, 0x27, 0x27, 0x3B, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 
	0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x70, 0x77, 0x64, 0x27, 0x29, 0x2E, 0x76, 
	0x61, 0x6C, 0x75, 0x65, 0x20, 0x3D, 0x20, 0x63, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x2E, 0x70, 0x77, 
	0x64, 0x20, 0x7C, 0x7C, 0x20, 0x27, 0x27, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 0x20, 0xE5, 
	0xA1, 0xAB, 0xE5, 0x85, 0x85, 0xE5, 0xB9, 0xB6, 0xE5, 0xB1, 0x95, 0xE5, 0xBC, 0x80, 0x4D, 0x51, 
	0x54, 0x54, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6F, 
	0x6E, 0x66, 0x69, 0x67, 0x2E, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x72, 0x6C, 0x29, 0x20, 0x7B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 
	0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 
	0x71, 0x74, 0x74, 0x5F, 0x75, 0x72, 0x6C, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 
	0x3D, 0x20, 0x63, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x2E, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x72, 
	0x6C, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6F, 0x67, 0x67, 0x6C, 0x65, 0x53, 0x65, 
	0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 
	0x6F, 0x6E, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 
	0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 
	0x64, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 
	0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x3D, 0x20, 0x63, 0x6F, 0x6E, 0x66, 0x69, 
	0x67, 0x2E, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x20, 
	0x7C, 0x7C, 0x20, 0x27, 0x27, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 
	0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 
	0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x70, 0x77, 0x64, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 
	0x65, 0x20, 0x3D, 0x20, 0x63, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x2E, 0x6D, 0x71, 0x74, 0x74, 0x5F, 
	0x70, 0x77, 0x64, 0x20, 0x7C, 0x7C, 0x20, 0x27, 0x27, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6F, 0x63, 0x75, 
	0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 
	0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x64, 0x6F, 0x77, 0x6E, 0x5F, 0x74, 
	0x6F, 0x70, 0x69, 0x63, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x3D, 0x20, 0x63, 
	0x6F, 0x6E, 0x66, 0x69, 0x67, 0x2E, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x64, 0x6F, 0x77, 0x6E, 0x5F, 
	0x74, 0x6F, 0x70, 0x69, 0x63, 0x20, 0x7C, 0x7C, 0x20, 0x27, 0x27, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6F, 
	0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 
	0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x70, 0x5F, 0x74, 
	0x6F, 0x70, 0x69, 0x63, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x3D, 0x20, 0x63, 
	0x6F, 0x6E, 0x66, 0x69, 0x67, 0x2E, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x70, 0x5F, 0x74, 0x6F, 
	0x70, 0x69, 0x63, 0x20, 0x7C, 0x7C, 0x20, 0x27, 0x27, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6F, 0x63, 0x75, 
	0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 
	0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x6F, 0x74, 0x61, 0x5F, 0x74, 0x6F, 
	0x70, 0x69, 0x63, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x3D, 0x20, 0x63, 0x6F, 
	0x6E, 0x66, 0x69, 0x67, 0x2E, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x6F, 0x74, 0x61, 0x5F, 0x74, 0x6F, 
	0x70, 0x69, 0x63, 0x20, 0x7C, 0x7C, 0x20, 0x27, 0x27, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 
	0x20, 0xE5, 0xA1, 0xAB, 0xE5, 0x85, 0x85, 0xE5, 0xB9, 0xB6, 0xE5, 0xB1, 0x95, 0xE5, 0xBC, 0x80, 
	0x4F, 0x54, 0x41, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 
	0x6F, 0x6E, 0x66, 0x69, 0x67, 0x2E, 0x6F, 0x74, 0x61, 0x5F, 0x75, 0x72, 0x6C, 0x29, 0x20, 0x7B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 
	0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6F, 
	0x74, 0x61, 0x5F, 0x75, 0x72, 0x6C, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x20, 0x3D, 
	0x20, 0x63, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x2E, 0x6F, 0x74, 0x61, 0x5F, 0x75, 0x72, 0x6C, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6F, 0x67, 0x67, 0x6C, 0x65, 0x53, 0x65, 0x63, 0x74, 
	0x69, 0x6F, 0x6E, 0x28, 0x27, 0x6F, 0x74, 0x61, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x27, 
	0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x7D, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x2E, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 
	0x3D, 0x3E, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x6F, 0x6C, 0x65, 0x2E, 0x6C, 0x6F, 
	0x67, 0x28, 0x27, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0xE5, 0x8A, 0xA0, 0xE8, 0xBD, 0xBD, 0xE5, 
	0xA4, 0xB1, 0xE8, 0xB4, 0xA5, 0x3A, 0x27, 0x2C, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x29, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x29, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x29, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x2F, 0x2F, 0x20, 0xE7, 0x9B, 0x91, 0xE5, 0x90, 0xAC, 0xE8, 0xA1, 0xA8, 0xE5, 0x8D, 
	0x95, 0xE6, 0x8F, 0x90, 0xE4, 0xBA, 0xA4, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 
	0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x77, 0x69, 0x66, 0x69, 
	0x46, 0x6F, 0x72, 0x6D, 0x27, 0x29, 0x2E, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x4C, 
	0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x28, 0x27, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x27, 
	0x2C, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x65, 0x76, 0x65, 0x6E, 0x74, 
	0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x76, 0x65, 
	0x6E, 0x74, 0x2E, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6E, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 
	0x74, 0x28, 0x29, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x2F, 0x2F, 0x20, 0xE7, 0xA6, 0x81, 0xE7, 0x94, 0xA8, 0xE6, 0x8C, 0x89, 0xE9, 0x92, 0xAE, 0xEF, 
	0xBC, 0x8C, 0xE9, 0x98, 0xB2, 0xE6, 0xAD, 0xA2, 0xE5, 0xA4, 0x9A, 0xE6, 0xAC, 0xA1, 0xE7, 0x82, 
	0xB9, 0xE5, 0x87, 0xBB, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 
	0x6E, 0x73, 0x74, 0x20, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6F, 0x6E, 
	0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 
	0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x73, 0x75, 0x62, 0x6D, 
	0x69, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6F, 
	0x6E, 0x2E, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x3D, 0x20, 0x74, 0x72, 0x75, 
	0x65, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 
	0x20, 0xE8, 0x8E, 0xB7, 0xE5, 0x8F, 0x96, 0xE8, 0xA1, 0xA8, 0xE5, 0x8D, 0x95, 0xE6, 0x95, 0xB0, 
	0xE6, 0x8D, 0xAE, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 
	0x73, 0x74, 0x20, 0x73, 0x73, 0x69, 0x64, 0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 
	0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 
	0x64, 0x28, 0x27, 0x73, 0x73, 0x69, 0x64, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 
	0x70, 0x77, 0x64, 0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 
	0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x70, 
	0x77, 0x64, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x55, 
	0x72, 0x6C, 0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 
	0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 0x71, 
	0x74, 0x74, 0x5F, 0x75, 0x72, 0x6C, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x6D, 
	0x71, 0x74, 0x74, 0x55, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x64, 0x6F, 
	0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 
	0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x73, 0x65, 0x72, 
	0x6E, 0x61, 0x6D, 0x65, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x6D, 0x71, 0x74, 
	0x74, 0x50, 0x77, 0x64, 0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 
	0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 
	0x6D, 0x71, 0x74, 0x74, 0x5F, 0x70, 0x77, 0x64, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 
	0x20, 0x6D, 0x71, 0x74, 0x74, 0x44, 0x6F, 0x77, 0x6E, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x20, 0x3D, 
	0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 
	0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x64, 
	0x6F, 0x77, 0x6E, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 
	0x65, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 
	0x74, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x55, 0x70, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x20, 0x3D, 0x20, 
	0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 
	0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x70, 
	0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x6D, 
	0x71, 0x74, 0x74, 0x4F, 0x74, 0x61, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x20, 0x3D, 0x20, 0x64, 0x6F, 
	0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 
	0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x6F, 0x74, 0x61, 0x5F, 
	0x74, 0x6F, 0x70, 0x69, 0x63, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x6F, 0x74, 
	0x61, 0x55, 0x72, 0x6C, 0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 
	0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 
	0x6F, 0x74, 0x61, 0x5F, 0x75, 0x72, 0x6C, 0x27, 0x29, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3B, 
	0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 0x20, 0xE7, 
	0xA1, 0xAE, 0xE4, 0xBF, 0x9D, 0xE8, 0x87, 0xB3, 0xE5, 0xB0, 0x91, 0xE6, 0x9C, 0x89, 0xE4, 0xB8, 
	0x80, 0xE4, 0xB8, 0xAA, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0xE9, 0xA1, 0xB9, 0xEF, 0xBC, 0x88, 
	0x57, 0x69, 0x2D, 0x46, 0x69, 0xE3, 0x80, 0x81, 0x4D, 0x51, 0x54, 0x54, 0xE3, 0x80, 0x81, 0x4F, 
	0x54, 0x41, 0xEF, 0xBC, 0x89, 0xE5, 0xA1, 0xAB, 0xE5, 0x86, 0x99, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x73, 0x73, 0x69, 0x64, 0x20, 0x26, 
	0x26, 0x20, 0x21, 0x6D, 0x71, 0x74, 0x74, 0x55, 0x72, 0x6C, 0x20, 0x26, 0x26, 0x20, 0x21, 0x6F, 
	0x74, 0x61, 0x55, 0x72, 0x6C, 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x28, 0x27, 0xE8, 0xAF, 0xB7, 
	0xE8, 0x87, 0xB3, 0xE5, 0xB0, 0x91, 0xE5, 0xA1, 0xAB, 0xE5, 0x86, 0x99, 0x20, 0x57, 0x69, 0x2D, 
	0x46, 0x69, 0x20, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0xE3, 0x80, 0x81, 0x4D, 0x51, 0x54, 0x54, 
	0x20, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0x20, 0xE6, 0x88, 0x96, 0x20, 0x4F, 0x54, 0x41, 0x20, 
	0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0xE4, 0xB8, 0xAD, 0xE7, 0x9A, 0x84, 0xE4, 0xB8, 0x80, 0xE4, 
	0xB8, 0xAA, 0xE3, 0x80, 0x82, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x42, 0x75, 0x74, 0x74, 
	0x6F, 0x6E, 0x2E, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x3D, 0x20, 0x66, 0x61, 
	0x6C, 0x73, 0x65, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x2F, 0x2F, 0x20, 0xE6, 0xA3, 0x80, 0xE6, 0x9F, 0xA5, 0x20, 0x4D, 0x51, 0x54, 0x54, 0x20, 0xE9, 
	0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0xE7, 0x9A, 0x84, 0xE6, 0x9D, 0xA1, 0xE4, 0xBB, 0xB6, 0xEF, 0xBC, 
	0x9A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 0x20, 0x31, 0x2E, 
	0x20, 0xE5, 0xA6, 0x82, 0xE6, 0x9E, 0x9C, 0xE6, 0x9C, 0x89, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x5F, 
	0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x20, 0xE6, 0x88, 0x96, 0x20, 0x6D, 0x71, 0x74, 
	0x74, 0x5F, 0x70, 0x77, 0x64, 0xEF, 0xBC, 0x8C, 0xE5, 0x88, 0x99, 0x20, 0x6D, 0x71, 0x74, 0x74, 
	0x5F, 0x75, 0x72, 0x6C, 0x20, 0xE5, 0xBF, 0x85, 0xE9, 0xA1, 0xBB, 0xE5, 0xA1, 0xAB, 0xE5, 0x86, 
	0x99, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 0x20, 0x32, 0x2E, 
	0x20, 0xE5, 0xA6, 0x82, 0xE6, 0x9E, 0x9C, 0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0x20, 0x6D, 0x71, 
	0x74, 0x74, 0x5F, 0x70, 0x77, 0x64, 0xEF, 0xBC, 0x8C, 0xE5, 0x88, 0x99, 0x20, 0x6D, 0x71, 0x74, 
	0x74, 0x5F, 0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x20, 0xE5, 0xBF, 0x85, 0xE9, 0xA1, 
	0xBB, 0xE5, 0xA1, 0xAB, 0xE5, 0x86, 0x99, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6D, 0x71, 0x74, 0x74, 0x55, 0x73, 0x65, 0x72, 0x6E, 0x61, 
	0x6D, 0x65, 0x20, 0x7C, 0x7C, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x50, 0x77, 0x64, 0x29, 0x20, 0x26, 
	0x26, 0x20, 0x21, 0x6D, 0x71, 0x74, 0x74, 0x55, 0x72, 0x6C, 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6C, 0x65, 0x72, 0x74, 
	0x28, 0x27, 0xE5, 0xA6, 0x82, 0xE6, 0x9E, 0x9C, 0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0x20, 0x4D, 
	0x51, 0x54, 0x54, 0x20, 0xE7, 0x94, 0xA8, 0xE6, 0x88, 0xB7, 0xE5, 0x90, 0x8D, 0xE6, 0x88, 0x96, 
	0xE5, 0xAF, 0x86, 0xE7, 0xA0, 0x81, 0xEF, 0xBC, 0x8C, 0xE5, 0xBF, 0x85, 0xE9, 0xA1, 0xBB, 0xE5, 
	0xA1, 0xAB, 0xE5, 0x86, 0x99, 0x20, 0x4D, 0x51, 0x54, 0x54, 0x20, 0xE6, 0x9C, 0x8D, 0xE5, 0x8A, 
	0xA1, 0xE5, 0x99, 0xA8, 0x20, 0x55, 0x52, 0x4C, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x42, 
	0x75, 0x74, 0x74, 0x6F, 0x6E, 0x2E, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x3D, 
	0x20, 0x66, 0x61, 0x6C, 0x73, 0x65, 0x3B, 0x20, 0x2F, 0x2F, 0x20, 0xE6, 0x81, 0xA2, 0xE5, 0xA4, 
	0x8D, 0xE6, 0x8C, 0x89, 0xE9, 0x92, 0xAE, 0xE5, 0x8F, 0xAF, 0xE7, 0x82, 0xB9, 0xE5, 0x87, 0xBB, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 
	0x74, 0x75, 0x72, 0x6E, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6D, 0x71, 
	0x74, 0x74, 0x50, 0x77, 0x64, 0x20, 0x26, 0x26, 0x20, 0x21, 0x6D, 0x71, 0x74, 0x74, 0x55, 0x73, 
	0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x28, 0x27, 0xE5, 0xA6, 
	0x82, 0xE6, 0x9E, 0x9C, 0xE8, 0xBE, 0x93, 0xE5, 0x85, 0xA5, 0x20, 0x4D, 0x51, 0x54, 0x54, 0x20, 
	0xE5, 0xAF, 0x86, 0xE7, 0xA0, 0x81, 0xEF, 0xBC, 0x8C, 0xE5, 0xBF, 0x85, 0xE9, 0xA1, 0xBB, 0xE5, 
	0xA1, 0xAB, 0xE5, 0x86, 0x99, 0x20, 0x4D, 0x51, 0x54, 0x54, 0x20, 0xE7, 0x94, 0xA8, 0xE6, 0x88, 
	0xB7, 0xE5, 0x90, 0x8D, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6F, 
	0x6E, 0x2E, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x3D, 0x20, 0x66, 0x61, 0x6C, 
	0x73, 0x65, 0x3B, 0x20, 0x2F, 0x2F, 0x20, 0xE6, 0x81, 0xA2, 0xE5, 0xA4, 0x8D, 0xE6, 0x8C, 0x89, 
	0xE9, 0x92, 0xAE, 0xE5, 0x8F, 0xAF, 0xE7, 0x82, 0xB9, 0xE5, 0x87, 0xBB, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 0x20, 0xE6, 0x9E, 0x84, 0xE9, 0x80, 
	0xA0, 0xE8, 0xAF, 0xB7, 0xE6, 0xB1, 0x82, 0xE7, 0x9A, 0x84, 0xE6, 0x95, 0xB0, 0xE6, 0x8D, 0xAE, 
	0xE5, 0xAF, 0xB9, 0xE8, 0xB1, 0xA1, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3D, 0x20, 0x7B, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x73, 0x69, 0x64, 
	0x3A, 0x20, 0x73, 0x73, 0x69, 0x64, 0x2C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x77, 0x64, 0x3A, 0x20, 0x70, 0x77, 0x64, 0x2C, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x71, 0x74, 0x74, 
	0x5F, 0x75, 0x72, 0x6C, 0x3A, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x55, 0x72, 0x6C, 0x2C, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x71, 0x74, 0x74, 
	0x5F, 0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x3A, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x55, 
	0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x2C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x70, 0x77, 0x64, 0x3A, 0x20, 
	0x6D, 0x71, 0x74, 0x74, 0x50, 0x77, 0x64, 0x2C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x64, 0x6F, 0x77, 0x6E, 0x5F, 
	0x74, 0x6F, 0x70, 0x69, 0x63, 0x3A, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x44, 0x6F, 0x77, 0x6E, 0x54, 
	0x6F, 0x70, 0x69, 0x63, 0x2C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x5F, 0x75, 0x70, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 
	0x3A, 0x20, 0x6D, 0x71, 0x74, 0x74, 0x55, 0x70, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x2C, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x71, 0x74, 0x74, 
	0x5F, 0x6F, 0x74, 0x61, 0x5F, 0x74, 0x6F, 0x70, 0x69, 0x63, 0x3A, 0x20, 0x6D, 0x71, 0x74, 0x74, 
	0x4F, 0x74, 0x61, 0x54, 0x6F, 0x70, 0x69, 0x63, 0x2C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x74, 0x61, 0x5F, 0x75, 0x72, 0x6C, 0x3A, 0x20, 
	0x6F, 0x74, 0x61, 0x55, 0x72, 0x6C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x7D, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 
	0x20, 0xE5, 0x8F, 0x91, 0xE8, 0xB5, 0xB7, 0x48, 0x54, 0x54, 0x50, 0xE8, 0xAF, 0xB7, 0xE6, 0xB1, 
	0x82, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 
	0x28, 0x27, 0x2F, 0x63, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x27, 0x2C, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x65, 0x74, 0x68, 0x6F, 
	0x64, 0x3A, 0x20, 0x27, 0x50, 0x4F, 0x53, 0x54, 0x27, 0x2C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x3A, 
	0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x27, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, 0x54, 0x79, 0x70, 
	0x65, 0x27, 0x3A, 0x20, 0x27, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 
	0x2F, 0x6A, 0x73, 0x6F, 0x6E, 0x27, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x62, 0x6F, 0x64, 0x79, 0x3A, 0x20, 0x4A, 0x53, 0x4F, 0x4E, 0x2E, 0x73, 
	0x74, 0x72, 0x69, 0x6E, 0x67, 0x69, 0x66, 0x79, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x0D, 0x0A, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x2E, 0x74, 0x68, 0x65, 0x6E, 0x28, 0x72, 0x65, 0x73, 0x70, 0x6F, 0x6E, 
	0x73, 0x65, 0x20, 0x3D, 0x3E, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6F, 0x6E, 0x73, 0x65, 0x2E, 0x6A, 
	0x73, 0x6F, 0x6E, 0x28, 0x29, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x2E, 0x74, 0x68, 0x65, 0x6E, 0x28, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3D, 0x3E, 0x20, 0x7B, 0x0D, 
	0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 
	0x28, 0x64, 0x61, 0x74, 0x61, 0x2E, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3D, 0x3D, 0x3D, 
	0x20, 0x27, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x27, 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 
	0x6C, 0x65, 0x72, 0x74, 0x28, 0x27, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0x91, 0xE6, 0x88, 0x90, 0xE5, 
	0x8A, 0x9F, 0xEF, 0xBC, 0x81, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 
	0x28, 0x64, 0x61, 0x74, 0x61, 0x2E, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x3D, 0x3D, 0x3D, 
	0x20, 0x27, 0x66, 0x61, 0x69, 0x6C, 0x75, 0x72, 0x65, 0x27, 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 
	0x6C, 0x65, 0x72, 0x74, 0x28, 0x27, 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0x91, 0xE5, 0xA4, 0xB1, 0xE8, 
	0xB4, 0xA5, 0xEF, 0xBC, 0x9A, 0x27, 0x20, 0x2B, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2E, 0x6D, 0x65, 
	0x73, 0x73, 0x61, 0x67, 0x65, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x7D, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x63, 0x61, 0x74, 
	0x63, 0x68, 0x28, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x3D, 0x3E, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x6F, 
	0x6C, 0x65, 0x2E, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x28, 0x27, 0xE8, 0xAF, 0xB7, 0xE6, 0xB1, 0x82, 
	0xE9, 0x94, 0x99, 0xE8, 0xAF, 0xAF, 0x3A, 0x27, 0x2C, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x29, 
	0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 
	0x6C, 0x65, 0x72, 0x74, 0x28, 0x27, 0xE8, 0xAF, 0xB7, 0xE6, 0xB1, 0x82, 0xE5, 0xA4, 0xB1, 0xE8, 
	0xB4, 0xA5, 0xEF, 0xBC, 0x8C, 0xE8, 0xAF, 0xB7, 0xE6, 0xA3, 0x80, 0xE6, 0x9F, 0xA5, 0xE7, 0xBD, 
	0x91, 0xE7, 0xBB, 0x9C, 0xE8, 0xBF, 0x9E, 0xE6, 0x8E, 0xA5, 0xE3, 0x80, 0x82, 0x27, 0x29, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x29, 0x0D, 0x0A, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x66, 0x69, 0x6E, 0x61, 0x6C, 0x6C, 0x79, 0x28, 0x28, 
	0x29, 0x20, 0x3D, 0x3E, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x20, 0x20, 0x2F, 0x2F, 0x20, 0xE8, 0xAF, 0xB7, 0xE6, 0xB1, 0x82, 0xE7, 0xBB, 0x93, 
	0xE6, 0x9D, 0x9F, 0xE5, 0x90, 0x8E, 0xE6, 0x81, 0xA2, 0xE5, 0xA4, 0x8D, 0xE6, 0x8C, 0x89, 0xE9, 
	0x92, 0xAE, 0xE7, 0x9A, 0x84, 0xE5, 0x8F, 0xAF, 0xE7, 0x82, 0xB9, 0xE5, 0x87, 0xBB, 0xE7, 0x8A, 
	0xB6, 0xE6, 0x80, 0x81, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
	0x20, 0x20, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x42, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x2E, 0x64, 
	0x69, 0x73, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x3D, 0x20, 0x66, 0x61, 0x6C, 0x73, 0x65, 0x3B, 
	0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 
	0x20, 0x20, 0x20, 0x7D, 0x29, 0x3B, 0x0D, 0x0A, 0x3C, 0x2F, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 
	0x3E, 0x0D, 0x0A, 0x0D, 0x0A, 0x3C, 0x2F, 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0D, 0x0A, 0x3C, 0x2F, 
	0x68, 0x74, 0x6D, 0x6C, 0x3E, 0x00
};

static const char *TAG = "app_provisioning";
static TimerHandle_t s_provision_timer = NULL;

static void _provisioning_timeout(void *param)
{
	ESP_LOGI(TAG, "provisioning timeout");
	app_nvs_save_wifi_mode(HAL_WIFI_MODE_STA);
	vTaskDelay(100);
	esp_restart();
}

static void _reboot_task(void *param)
{
	vTaskDelay(100);
	ESP_LOGI(TAG, "Rebooting...");
	esp_restart();
	vTaskDelete(NULL);
}

char *_provisioning_http_get_html_cb(void)
{
    return (char *)html;
}

char *_provisioning_http_get_config_cb(void)
{
    cJSON *root = cJSON_CreateObject();

	app_wifi_info_t *wifi_info = app_wifi_get_info();
    cJSON_AddStringToObject(root, "ssid", wifi_info->conn_info.ssid);
    cJSON_AddStringToObject(root, "pwd", wifi_info->conn_info.pwd);

	app_mqtt_info_t *mqtt_info = app_mqtt_get_info();
	cJSON_AddStringToObject(root, "mqtt_url", mqtt_info->cfg.url);
	cJSON_AddStringToObject(root, "mqtt_username", mqtt_info->cfg.username);
	cJSON_AddStringToObject(root, "mqtt_pwd", mqtt_info->cfg.password);
	cJSON_AddStringToObject(root, "mqtt_down_topic", mqtt_info->topic.set_topic);
	cJSON_AddStringToObject(root, "mqtt_up_topic", mqtt_info->topic.report_topic);
	cJSON_AddStringToObject(root, "mqtt_ota_topic", mqtt_info->topic.ota_topic);

	app_ota_config_t *ota_cfg = app_ota_get_cfg();
	cJSON_AddStringToObject(root, "ota_url", ota_cfg->url);

    const char *json_str = cJSON_PrintUnformatted(root);
    cJSON_Delete(root);

    return (char *)json_str;
}

char *_provisioning_http_post_cb(const char *content)
{
	// {"ssid":"nzttj","pwd":"12345678909","mqtt_url":"","mqtt_username":"","mqtt_pwd":"","mqtt_down_topic":"","mqtt_up_topic":"","mqtt_ota_topic":"","ota_url":""}
	ESP_LOGI(TAG, "content: %s", content);
	cJSON *json = cJSON_Parse(content);
	if (json == NULL)
	{
		ESP_LOGE(TAG, "Failed to parse JSON");
		return "{\"status\":\"falilu\",\"message\":\"Failed to parse JSON\"}";
	}

	cJSON *ssid_item = cJSON_GetObjectItem(json, "ssid");
	if (cJSON_IsString(ssid_item) && strlen(ssid_item->valuestring))
	{
		app_wifi_info_t *wifi_info = app_wifi_get_info();

		memset(&wifi_info->conn_info, 0, sizeof(app_sta_conn_info_t));

		ESP_LOGI(TAG, "ssid: %s", ssid_item->valuestring);
		strncpy(wifi_info->conn_info.ssid, ssid_item->valuestring, sizeof(wifi_info->conn_info.ssid) - 1);
		wifi_info->conn_info.ssid[sizeof(wifi_info->conn_info.ssid) - 1] = '\0';

		cJSON *pwd_item = cJSON_GetObjectItem(json, "pwd");
		if (cJSON_IsString(pwd_item))
		{
			ESP_LOGI(TAG, "pwd: %s", pwd_item->valuestring);
			strncpy(wifi_info->conn_info.pwd, pwd_item->valuestring, sizeof(wifi_info->conn_info.pwd) - 1);
			wifi_info->conn_info.pwd[sizeof(wifi_info->conn_info.pwd) - 1] = '\0';
		}

		// 保存flash
		app_nvs_save_wifi_sta_info(wifi_info);
	}

	cJSON *mqtt_url_item = cJSON_GetObjectItem(json, "mqtt_url");
	if (cJSON_IsString(mqtt_url_item) && strlen(mqtt_url_item->valuestring))
	{
		app_mqtt_info_t *mqtt_info = app_mqtt_get_info();

		ESP_LOGI(TAG, "mqtt_url: %s", mqtt_url_item->valuestring);
		strncpy(mqtt_info->cfg.url, mqtt_url_item->valuestring, sizeof(mqtt_info->cfg.url) - 1);
		mqtt_info->cfg.url[sizeof(mqtt_info->cfg.url) - 1] = '\0';

		cJSON *mqtt_username_item = cJSON_GetObjectItem(json, "mqtt_username");
		if (cJSON_IsString(mqtt_username_item))
		{
			ESP_LOGI(TAG, "mqtt_username: %s", mqtt_username_item->valuestring);
			strncpy(mqtt_info->cfg.username, mqtt_username_item->valuestring, sizeof(mqtt_info->cfg.username) - 1);
			mqtt_info->cfg.username[sizeof(mqtt_info->cfg.username) - 1] = '\0';
		}

		cJSON *mqtt_pwd_item = cJSON_GetObjectItem(json, "mqtt_pwd");
		if (cJSON_IsString(mqtt_pwd_item))
		{
			ESP_LOGI(TAG, "mqtt_pwd: %s", mqtt_pwd_item->valuestring);
			strncpy(mqtt_info->cfg.password, mqtt_pwd_item->valuestring, sizeof(mqtt_info->cfg.password) - 1);
			mqtt_info->cfg.password[sizeof(mqtt_info->cfg.password) - 1] = '\0';
		}

		cJSON *mqtt_down_topic_item = cJSON_GetObjectItem(json, "mqtt_down_topic");
		if (cJSON_IsString(mqtt_down_topic_item))
		{
			ESP_LOGI(TAG, "mqtt_down_topic: %s", mqtt_down_topic_item->valuestring);
			strncpy(mqtt_info->topic.set_topic, mqtt_down_topic_item->valuestring, sizeof(mqtt_info->topic.set_topic) - 1);
			mqtt_info->topic.set_topic[sizeof(mqtt_info->topic.set_topic) - 1] = '\0';
		}
		
		cJSON *mqtt_up_topic_item = cJSON_GetObjectItem(json, "mqtt_up_topic");
		if (cJSON_IsString(mqtt_up_topic_item))
		{
			ESP_LOGI(TAG, "mqtt_up_topic: %s", mqtt_up_topic_item->valuestring);
			strncpy(mqtt_info->topic.report_topic, mqtt_up_topic_item->valuestring, sizeof(mqtt_info->topic.report_topic) - 1);
			mqtt_info->topic.report_topic[sizeof(mqtt_info->topic.report_topic) - 1] = '\0';
		}

		cJSON *mqtt_ota_topic_item = cJSON_GetObjectItem(json, "mqtt_ota_topic");
		if (cJSON_IsString(mqtt_ota_topic_item))
		{
			ESP_LOGI(TAG, "mqtt_ota_topic: %s", mqtt_ota_topic_item->valuestring);
			strncpy(mqtt_info->topic.ota_topic, mqtt_ota_topic_item->valuestring, sizeof(mqtt_info->topic.ota_topic) - 1);
			mqtt_info->topic.ota_topic[sizeof(mqtt_info->topic.ota_topic) - 1] = '\0';
		}

		// 保存flash
		app_nvs_save_mqtt_cfg(&mqtt_info->cfg);
		app_nvs_save_mqtt_topic(&mqtt_info->topic);
	}

	cJSON *ota_url_item = cJSON_GetObjectItem(json, "ota_url");
	if (cJSON_IsString(ota_url_item) && strlen(ota_url_item->valuestring))
	{
		ESP_LOGI(TAG, "ota_url: %s", ota_url_item->valuestring);
		app_ota_config_t *ota_cfg = app_ota_get_cfg();
		strncpy(ota_cfg->url, ota_url_item->valuestring, sizeof(ota_cfg->url) - 1);
		ota_cfg->url[sizeof(ota_cfg->url) - 1] = '\0';

		app_nvs_save_ota_cfg(ota_cfg);
	}

	// 设置为STA模式
	app_nvs_save_wifi_mode(HAL_WIFI_MODE_STA);

	// 重启
	xTaskCreate(_reboot_task, "reboot_task", 1024, NULL, 5, NULL);

	return "{\"status\": \"success\"}";
}

int app_provisioning_init(void)
{
    provisioning_register_http_get_html_cb(_provisioning_http_get_html_cb);
    provisioning_register_http_get_config_cb(_provisioning_http_get_config_cb);
    provisioning_register_http_post_cb(_provisioning_http_post_cb);
    provisioning_start();

	app_wifi_info_t *wifi_info = app_wifi_get_info();
	if (strlen(wifi_info->conn_info.ssid)) {
		// 创建配网超时定时器
		s_provision_timer = xTimerCreate("provision_timer", pdMS_TO_TICKS(1000 * 60 * 5), pdFALSE, NULL, _provisioning_timeout);
		if (s_provision_timer) {
			ESP_LOGI(TAG, "provisioning timer start");
			xTimerStart(s_provision_timer, pdMS_TO_TICKS(10));
		}
	}

    return 0;
}

int app_provisioning_deinit(void)
{
    provisioning_stop();
	if (s_provision_timer) {
		xTimerDelete(s_provision_timer, pdMS_TO_TICKS(10));
		s_provision_timer = NULL;
	}
    return 0;
}
